<?php

new ZB_Seo;

// 内置SEO库
class ZB_Seo {

    public $is_seo           = false;
    public $site_no_categoty = true;
    public $site_seo         = array();
    public $separator        = '-';

    public function __construct() {
        $this->is_seo           = _xin('is_theme_seo', false);
        $this->site_no_categoty = _xin('site_no_categoty', true);
        $this->site_seo         = _xin('site_seo');
        $this->separator        = (isset($this->site_seo['separator'])) ? $this->site_seo['separator'] : '-';
        add_filter('excerpt_more', array($this, 'new_excerpt_more'));
        add_action('wp_head', array($this, 'custom_head_favicon'), 6);

        if ($this->is_seo && is_array($this->site_seo)) {
            add_filter('document_title_separator', array($this, 'custom_title_separator_to_line'));
            add_filter('document_title_parts', array($this, 'custom_post_document_parts'));
            add_filter('pre_get_document_title', array($this, '_wp_get_document_title'));
            add_filter('excerpt_length', array($this, 'excerpt_length'));
            add_action('wp_head', array($this, 'custom_head'), 5);
        }

        if ($this->site_no_categoty && !function_exists('no_category_base_refresh_rules')) {
            // 代码...
        }
    }

    public function custom_head_favicon() {
        if ($site_favicon = _xin('site_favicon')) {
            echo "<link href=\"$site_favicon\" rel=\"icon\">\n";
        }
    }

    //修饰更多字符
    public function new_excerpt_more($more) {
        return '...';
    }

    //摘要长度
    public function excerpt_length($length) {
        return 120;
    }

    //标题分隔符修改成 “-”
    public function custom_title_separator_to_line() {
        return $this->separator; //自定义标题分隔符
    }

    //自定义SEO标题 自定义标题
    public function custom_post_document_parts($parts) {

        $_meta_title = '';

        if (is_singular()) {
            $_meta_title = get_post_meta(get_the_ID(), 'post_titie', true);
        } elseif (is_category() || is_tag()) {
            // 分类/标签页面
            $term_id     = get_queried_object_id();
            $_meta_title = get_term_meta($term_id, 'seo-title', true);
        }

        if (!empty($_meta_title)) {
            $parts['title'] = trim($_meta_title);
        }

        return $parts;
    }

    // 自定义头部钩子 添加描述、关键词和meta_og标签
    public function custom_head() {
        global $post;
        $key     = '';
        $desc    = '';
        $meta_og = array();
        if (is_home()) {
            // 首页
            $key  = $this->site_seo['keywords'];
            $desc = $this->site_seo['description'];
        } elseif (is_singular()) {

            $meta_keywords    = get_post_meta($post->ID, 'keywords', true);
            $meta_description = get_post_meta($post->ID, 'description', true);
            // 文章页面
            if (!empty($meta_keywords)) {
                $key = trim($meta_keywords);
            } else {
                if (get_the_tags($post->ID)) {
                    foreach (get_the_tags($post->ID) as $tag) {
                        $key .= $tag->name . ',';
                    }
                }
                foreach (get_the_category($post->ID) as $category) {
                    $key .= $category->cat_name . ',';
                }
            }

            if (!empty($meta_description)) {
                $desc = trim($meta_description);
            } else {
                $excerpt = get_the_excerpt($post->ID);
                if (empty($excerpt)) {
                    $excerpt = $post->post_content;
                }
                $desc = wp_trim_words(strip_shortcodes($excerpt), 120, '');
            }

        } elseif (is_category() || is_tag()) {
            // 分类/标签页面
            $termObj = get_queried_object();

            $key  = $termObj->name . ',' . $termObj->slug;
            $desc = trim($termObj->description);

            $meta_keywords    = get_term_meta($termObj->term_id, 'seo-keywords', true);
            $meta_description = get_term_meta($termObj->term_id, 'seo-description', true);

            if (!empty($meta_keywords)) {
                $key = trim($meta_keywords);
            }

            if (!empty($meta_description)) {
                $desc = trim($meta_description);
            }

        }

        if (!empty($key)) {
            echo "<meta name=\"keywords\" content=\"$key\">\n";
        }
        if (!empty($desc)) {
            echo "<meta name=\"description\" content=\"$desc\">\n";
        }

    }

    //标题修正优化
    public function _wp_get_document_title() {

        global $page, $paged;

        $title = array(
            'title' => '',
        );

        // 如果是404页面，使用"页面未找到"标题。
        if (is_404()) {
            // $title['title'] = __('Page not found', 'business');

            // 如果是搜索页面，使用动态搜索结果标题。
        } elseif (is_search()) {
            /* 翻译者：%s: 搜索查询。*/
            $title['title'] = sprintf(__('Search Results for &#8220;%s&#8221;'), get_search_query());

            // 如果是首页，使用网站标题。
        } elseif (is_front_page()) {
            $title['title'] = get_bloginfo('name', 'display');

            // 如果是文章类型归档页面，使用文章类型归档标题。
        } elseif (is_post_type_archive()) {
            $title['title'] = post_type_archive_title('', false);

            // 如果是分类法归档页面，使用分类标题。
        } elseif (is_tax()) {
            $title['title'] = single_term_title('', false);
        /*
         * 如果是不在首页的博客页面
         * 或任何文章类型的单篇文章，使用文章标题。
         */
        } elseif (is_home() || is_singular()) {
            $title['title'] = single_post_title('', false);

            // 如果是分类或标签归档页面，使用分类标题。
        } elseif (is_category() || is_tag()) {
            $title['title'] = single_term_title('', false);

            // 如果是作者归档页面，使用作者的显示名称。
        } elseif (is_author() && get_queried_object()) {
            $author         = get_queried_object();
            $title['title'] = $author->display_name;

            // 如果是日期归档页面，使用日期作为标题。
        } elseif (is_year()) {
            $title['title'] = get_the_date(_x('Y', 'yearly archives date format'));

        // 如果是月份归档页面，使用月份作为标题。
        } elseif (is_month()) {
            $title['title'] = get_the_date(_x('F Y', 'monthly archives date format'));

        // 如果是日期归档页面，使用日期作为标题。
        } elseif (is_day()) {
            $title['title'] = get_the_date();
        }

        // 必要时添加页码
        if (($paged >= 2 || $page >= 2) && !is_404()) {
            /* 翻译者：%s: 页码。*/
            $title['page'] = sprintf(__('Page %s'), max($paged, $page));
        }

        if (is_front_page()) {
            $title['tagline'] = get_bloginfo('description', 'display');
        } else {
            $title['site'] = get_bloginfo('name', 'display');
        }

        $sep = apply_filters('document_title_separator', '-');

        $title = apply_filters('document_title_parts', $title);

        $title = implode("$sep", array_filter($title));

        $title = wptexturize($title);

        $title = convert_chars($title);
        $title = esc_html($title);
        $title = capital_P_dangit($title);

        return $title;
    }

}